//package com.plian.system.service.ra.agreementrent;
//
//import com.fasterxml.jackson.core.type.TypeReference;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import com.plian.Tools.StringUtil;
//import com.plian.Tools.TokenUtil;
//import com.plian.Tools.UuidUtil;
//import com.plian.Tools.pagedata.PageData;
//import com.plian.system.config.exception.MyRuntimeException;
//import com.plian.system.constant.sys.FormTypeConstant;
//import com.plian.system.dao.ra.agreementrent.AgreementRentDao;
//import com.plian.system.dao.ra.agreementrentsublia.AgreementRentSubliADao;
//import com.plian.system.dao.ra.estateregistration.EstateRegistrationDao;
//import com.plian.system.dao.ra.landassets.LandAssetsDao;
//import com.plian.system.dao.ra.realestatedivisionsubli.RealEstateDivisionSubliDao;
//import com.plian.system.dao.sys.orgzation.OrgzationDao;
//import com.plian.system.model.CommonCode;
//import com.plian.system.model.ListResult;
//import com.plian.system.model.ObjResult;
//import com.plian.system.model.page.Page;
//import com.plian.system.service.sys.code.IFormCodeService;
//import com.plian.system.service.sys.file.FileService;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang.exception.ExceptionUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.util.*;
//
//import static com.plian.system.constant.sys.FormStatusConstant.*;
//
//@Service
//@Slf4j
//public class AgreementRentService {
//    @Autowired
//    AgreementRentDao agreementRentDao;
//    @Autowired
//    AgreementRentSubliADao agreementRentSubliADao;
//    @Autowired
//    OrgzationDao orgzationDao;
//    @Autowired
//    FileService fileService;
//    @Autowired
//    EstateRegistrationDao estateRegistrationDao;
//    @Autowired
//    LandAssetsDao landAssetsDao;
//    @Autowired
//    IFormCodeService formCodeService;
//    @Autowired
//    RealEstateDivisionSubliDao realEstateDivisionSubliDao;
//
//    /**
//     * 保存
//     *
//     * @param pd
//     * @return
//     */
//    public ObjResult save(PageData pd) {
//        try {
//            pd.put("id", UuidUtil.get32UUID());
//            pd.put("orgId", TokenUtil.getTokenOrgId());
//            pd.put("code", formCodeService.getCode(FormTypeConstant.RA_AGREEMENT_RANT));
//            pd.put("formType", FormTypeConstant.RA_AGREEMENT_RANT);
//            pd.put("createTime", new Date());
//            pd.put("createUser", TokenUtil.getTokenUserId());
//            pd.put("updateTime", new Date());
//            pd.put("updateUser", TokenUtil.getTokenUserId());
//            pd.put("reportTime", new Date());
//            agreementRentDao.save(pd);
//            fileService.edit(pd.getString("id"), (List<HashMap>) pd.get("list_doc"));
//            ObjectMapper mapper = new ObjectMapper();
//            List<PageData> listSubliA = mapper.convertValue((List<PageData>) pd.get("listSubliA"),
//                    new TypeReference<List<PageData>>() {
//                    });
//            if (listSubliA != null && listSubliA.size() > 0) {
//                saveSubli(listSubliA, pd.getString("id"));
//            }
//            return new ObjResult(CommonCode.SUCCESS);
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException(new ObjResult(CommonCode.ERROR));
//        }
//    }
//
//    /**
//     * 修改
//     *
//     * @param pd
//     * @return
//     */
//    public ObjResult edit(PageData pd) {
//        try {
//            pd.put("updateTime", new Date());
//            pd.put("updateUser", TokenUtil.getTokenUserId());
//            pd.put("reportTime", new Date());
//            pd.remove("registration_date");
//            agreementRentDao.edit(pd);
//            fileService.edit(pd.getString("id"), (List<HashMap>) pd.get("list_doc"));
//            changeRoomStatus(pd.getString("id"));
//            agreementRentSubliADao.delByParent(pd.getString("id"));
//            ObjectMapper mapper = new ObjectMapper();
//            List<PageData> listSubliA = mapper.convertValue((List<PageData>) pd.get("listSubliA"),
//                    new TypeReference<List<PageData>>() {
//                    });
//            if (listSubliA != null && listSubliA.size() > 0) {
//                saveSubli(listSubliA, pd.getString("id"));
//            }
//            return new ObjResult(CommonCode.SUCCESS);
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException(new ObjResult(CommonCode.ERROR));
//        }
//    }
//
//    /**
//     * 保存从表
//     *
//     * @param list
//     * @param agreementrentId
//     * @throws Exception
//     */
//    public void saveSubli(List<PageData> list, String agreementrentId) throws Exception {
//        if (list != null && list.size() > 0) {
//            for (int i = 0; i < list.size(); i++){
//                PageData pageData = list.get(i);
//                pageData.put("agreementrentId", agreementrentId);
//                //老数据id不变
//                if (StringUtil.isBlank(pageData.getString("id"))){
//                    pageData.put("id", UuidUtil.get32UUID());
//                }
//                pageData.put("sort", i);
//
//                String roomId = pageData.getString("roomId");
//                if (StringUtil.isNotBlank(roomId)){
//                    PageData roomPageData = new PageData();
//                    roomPageData.put("id", roomId);
//                    roomPageData.put("roomStatus", 2);
//                    realEstateDivisionSubliDao.changeStatus(roomPageData);
//                }
//            }
//            agreementRentSubliADao.saveAll(list);
//        }
//    }
//
//
//    /**
//     * 单据详情
//     *
//     * @param pd
//     * @return
//     */
//    public ObjResult findbyid(PageData pd) {
//        try {
//            ObjResult objResult;
//            PageData p = agreementRentDao.findById(pd.getString("id"));
//            List<PageData> listSubli = agreementRentSubliADao.findById(pd.getString("id"));
//            p.put("listSubliA", listSubli);
//            objResult = new ObjResult(CommonCode.SUCCESS);
//            objResult.setPageData(p);
//            return objResult;
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException(new ObjResult(CommonCode.ERROR));
//        }
//    }
//
//    /**
//     * 根据id删除
//     *
//     * @param ids
//     * @return
//     */
//    public ObjResult del_ids(List<String> ids) {
//        try {
//            agreementRentDao.del_ids(ids);
//            for (String id : ids){
//                changeRoomStatus(id);
//                agreementRentSubliADao.delByParent(id);
//            }
//            return new ObjResult(CommonCode.SUCCESS);
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException(new ObjResult(CommonCode.ERROR));
//        }
//    }
//
//    /**
//     * 查询列表
//     *
//     * @return
//     */
//    public ListResult list(PageData pd) {
//        ListResult listResult;
//        try {
//            pd.put("orgId", TokenUtil.getTokenOrgId());
//            String status = pd.getString("status");
//            if (null != status && !"".equals(status)) {
//                pd.put("status", status.trim());
//            }
//            Page page = new Page(true, pd);
//            List<PageData> list = agreementRentDao.list(page);
//            listResult = new ListResult(CommonCode.SUCCESS);
//            listResult.setList(list);
//            listResult.setTotal(page.getTotal());
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            listResult = new ListResult(CommonCode.ERROR);
//        }
//        return listResult;
//    }
//
//    /**
//     * 查询列表
//     *
//     * @return
//     */
//    public ListResult refList(PageData pd) {
//        ListResult listResult;
//        try {
//            pd.put("orgId", TokenUtil.getTokenOrgId());
//            pd.put("isEnd", "true");
//            String status = pd.getString("status");
//            if (null != status && !"".equals(status)) {
//                pd.put("status", status.trim());
//            }
//            Page page = new Page(true, pd);
//            List<PageData> list = agreementRentDao.list(page);
//            listResult = new ListResult(CommonCode.SUCCESS);
//            listResult.setList(list);
//            listResult.setTotal(page.getTotal());
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            listResult = new ListResult(CommonCode.ERROR);
//        }
//        return listResult;
//    }
//
//
//    /**
//     * 提交
//     *
//     * @param ids
//     * @return
//     */
//    public ObjResult submit(List<String> ids) {
//        try {
//            PageData pageData = new PageData();
//            pageData.put("status", String.valueOf(FINISH));
//            pageData.put("id", ids);
//            if(execute(ids)){
//                agreementRentDao.refer(pageData);
//                return new ObjResult(CommonCode.SUCCESS);
//            }else {
//                return new ObjResult(CommonCode.ERROR);
//            }
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            return new ObjResult(CommonCode.ERROR);
//        }
//    }
//
//    /**
//     * 退回单据
//     *
//     * @param formId 单据id
//     */
//    public void reject(String formId) throws Exception {
//        PageData pageData = new PageData();
//        pageData.put("status", String.valueOf(REJECT));
//        pageData.put("id", Collections.singletonList(formId));
//        agreementRentDao.refer(pageData);
//    }
//
//    /**
//     * 审批完成
//     *
//     * @param formId
//     */
//    public void finish(String formId) {
//        try {
//            PageData pageData = new PageData();
//            pageData.put("status", String.valueOf(FINISH));
//            pageData.put("id", Collections.singletonList(formId));
//            agreementRentDao.refer(pageData);
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException("单据流转完成时修改单据状态失败！");
//        }
//    }
//
//    /**
//     * 工作流
//     *
//     * @param formIds 单据ids
//     */
//    public List<PageData> findByIds(List<String> formIds) {
//        try {
//            PageData pageData = new PageData();
//            pageData.put("ids", formIds);
//            return agreementRentDao.findByIds(pageData);
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException("根据单据id列表查询报表失败！");
//        }
//    }
//
//    public boolean execute(List<String> ids) {
//        try {
//            for (String id :
//                    ids){
//                List<PageData> lease = agreementRentSubliADao.findById(id);
//                for (PageData asset:
//                        lease) {
//                    PageData p = agreementRentDao.findByAssetId(asset);
//                    double idleArea = Double.valueOf(p.getString("idleArea")) - Double.valueOf(asset.getString("prospectiveLeasableArea"));
//                    double leasableArea = Double.valueOf(p.getString("openLeasedArea"))+Double.valueOf(asset.getString("prospectiveLeasableArea"));
//                    p.put("idleArea",idleArea);
//                    p.put("prospectiveLeasableArea",leasableArea);
//                    p.put("assetClasses",asset.getString("assetClasses"));
//                    agreementRentDao.adjust(p);
//                }
//            }
//        } catch (Exception e) {
//            return false;
//        }
//        return true;
//    }
//
//    public void stop(String id) throws Exception{
//        PageData pd = new PageData();
//        pd.put("status", 4);
//        pd.put("id", id);
//        agreementRentDao.referSingle(pd);
//        changeRoomStatus(id);
//    }
//
//    private void changeRoomStatus(String id){
//        try {
//            List<PageData> listSubli = agreementRentSubliADao.findById(id);
//            Optional.ofNullable(listSubli).orElse(new ArrayList<>()).stream()
//                    .filter(p -> StringUtil.isNotBlank(p.getString("roomId"))).forEach(p -> {
//                PageData roomPageData = new PageData();
//                roomPageData.put("id", p.getString("roomId"));
//                roomPageData.put("roomStatus", 1);
//                try {
//                    realEstateDivisionSubliDao.changeStatus(roomPageData);
//                } catch (Exception e) {
//                    throw new MyRuntimeException(new ObjResult(CommonCode.ERROR));
//                }
//            });
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException(new ObjResult(CommonCode.ERROR));
//        }
//    }
//
//    /**
//     * 回退状态单据
//     */
//    public void goBackToStash(String formId) {
//        try {
//            PageData p = agreementRentDao.findById(formId);
//            p.put("status",UNREVIEWED);
//            agreementRentDao.edit(p);
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//        }
//    }
//}
